串列就好像實體世界的的貨櫃,我們可以在任意調動貨櫃。在程式的世界,我們可以用串列進行資料的移動或選取,是不是跟移動貨櫃很像啊!
Meiko 回家的路上想了一下,整理帳單的時候,想要知道特定時間花了多少錢,常常不是乖乖地從頭到尾觀察,但目前 Jason 還沒跟她講該怎麼做?今天 Meiko 就帶著這樣的問題來找 Jason ...
Meiko:「對了,Jason,如果我想只要看到星期二到星期五花的錢有沒有辦法啊?」
Jason:「星期二到星期五,你如果算它們的位置的話是多少?」
Meiko:「是 2 到 5,阿不是,你有說程式的 index 是從0開始,0 代表weekName
裡面的星期一,1 就會是weekName
裡面的星期二,所以應該是 1 到 4。」
Jason :「這就對了,還好我沒有白教你。我們原本weekName[i]
只取第 i 個元素,現在你試試看用 weekName[開始位置:結束位置]
,看能不能讓你印出想要看的東西。」
Meiko :「雙面膠比較好用,白膠,普普,好拉,那我試一下,開始位置是 1 ,結束位置是 4 所以應該是 weekName[1:4]
」
Jason :「你確定是weekName[1:4]
嗎?你不要印出來看看?」
weekName=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
print (weekName[1:4])
Meiko:「厚,怎麼會只印到星期四,我想看到星期五,該不會結束位置要設定到第 5 個位置?那我試看看 weekName[1:5]
」
Meiko:「哈!對了!程式還蠻有趣的,寫錯就再稍微調整一下重跑就好。好像也不費什麼力氣。」
Jason:「對啊,像你這樣的初學者,重點不用怕犯錯,你寫出程式即使有錯,印出來馬上就可以看到錯在哪裡?因為你知道想要看到的結果,自然就會想辦法把那個結果產生出來。,像這邊,你又再一次的練習到 Python 起始點值和終點值的關係,比如說串列的內容[1:5],代表著 Python 會把串列當中,從第 1 個位置開始,到第 4 個位置拿出來,所以下次你只要記得你像看到哪一個元素,就把那個元素的位置再往後加 1 就可以得到正確的位置拉!」
Meiko:「那如果我不小心超過了串列的範圍會發生什麼事?」
Jason :「你放心,Python 程式也會告訴你,你知道現在的weekName
幾個元素嗎?」
Meiko:「有 7 個。」
Jason :「Okay,所以如果我們把weekName[7]
印出來看看
weekName=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
print (weekName[7])
Meiko:「為什麼它下面出現這個 Index Error: list index out of range ?」
Jason :「list index out of range 代表這個 index 超出了這個串列的範圍,也就是我們設定weekName[7]
的話,超出了串列的範圍,所以它就出現 Error 來告訴你這樣母湯!」
Meiko:「歐,這麼聰明,那如果我拿weekName[6]
就可以囉?我好像也不用問你,我自己用用看就知道
weekName=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
print (weekName[6])
Meiko:「耶,沒有再出現錯誤訊息了耶!」
Jason:「其實你有另外一個方法,可以取出最後一個位置,你看設定weekName[-1]
,把裡面的 index 換成 -1,也可以取出最後一個數值:星期日
weekName=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
print (weekName[-1])
Meiko:「這樣挺方便的,原來在程式裡面要達成目的也有 2 種不同的方向!」
Jason:「對啊,就看你用什麼樣的方式去思考!都可以多嘗試!」
Meiko:「Jason,我還有一個問題,如果我不想要只紀錄一星期花的錢,想要增加另外一個星期的消費,該怎麼辦?」
Jason:「好問題,這樣好了,那你把上星期花的錢,存在另外一個串列給我看」
Meiko:「好,我找一下我的發票明細,我上星期花的錢應該是這樣。」
spendList=[205,350,520,240,330,180,2000]
spendList=[180,250,450,300,220,1000,1500]
print (spendList)
Jason:「誒,你有沒有發現,你連續兩個星期的串列名字設定成同樣的名字?這樣不行拉
你這週是這週的名字,上週要有上週的名字,不然的話,程式就會紀錄最後設定的那一組資料喔」
spendList1=[205,350,520,240,330,180,2000]
spendList2=[180,250,450,300,220,1000,1500]
print (spendList1,spendList2)
Meiko:「歐,是兩個串列要存在不同的變數的意思?」
Jason:「沒錯,有兩個不同串列,spendList1
代表你本週每天的消費金額,spendList2
代表你上週的消費金額。好了,我們有了你這兩週的消費金額,我們可以把上週的消費金額,綁定在這週的消費金額之後,
spendList1=[205,350,520,240,330,180,2000]
spendList2=[180,250,450,300,220,1000,1500]
spendList1.extend(spendList2)
print (spendList1)
Meiko:「不錯耶,這將就變成一筆資料了,感覺比較合理!可是原理是什麼?」
Jason:「你看,我們這邊在spendList1
之後用了.extend()
這個函式,並且把spendList2
放進去,最後再印出來!就會如上圖最後的結果所示,變成一個擁有 2 周消費紀錄的串列了!」
Meiko:「哇,太神了!這樣我可以直接看一下這兩週是怎麼花錢的,誒,想說這期的信用卡費怎麼這麼高!啊,下週有幾天只能吃茶葉蛋配豆漿了!」
我大寶寶~拉,今天聊到串列的基本操作透過串列list
中 index 的選取不同區間的串列內容,以及.extend()
的方式,把兩個不同串列合併,大家可以多試試看,不同的 index,確認自己能夠熟悉串列的基本操作喔!明天就會有練習題讓大家做了!
歡迎登入留言跟我分享你的想法唷!(登入不麻煩,點一下 FB 登入就可以留言了!)
1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.如果前面的內容忘記了,趕快看一下大寶寶這一系列的看對話學 Python 資料分析,用情境故事帶你入門的列表!跟大寶寶一起 Happy Coding 囉!